package transport

import (
	"context"
	"encoding/json"
	"errors"
	"go-kit-demo/endpoint"
	"net/http"
	"strconv"
)

// 主要负责与HTTP、gRPC、thrift等相关逻辑

// DecodeRequest 解码后封装至 EndPoint.Request
func DecodeUserRequest(c context.Context, r *http.Request) (interface{}, error) {
	if id := r.URL.Query().Get("id"); id != "" {
		uid, err := strconv.Atoi(id)
		if err != nil {
			return nil, errors.New("参数需要数字")
		}
		return endpoint.UserRequest{uid}, nil
	}

	return nil, errors.New("缺少参数")
}

// EncodeResponse 响应封装成 EndPoint.Response 结构体即可
func EncodeUserResponse(c context.Context, w http.ResponseWriter, response interface{}) error {
	// 这里将Response返回成有效的json格式给http
	// 设置请求头信息
	w.Header().Set("Content-Type", "application/json;charset=utf-8")

	// 使用内置json包转换
	return json.NewEncoder(w).Encode(response)
}
